#include <sys_head.h>

int main(int argc, char const *argv[])
{
    //判断命令行参数
    if (argc < 2)
    {
        printf("参数错误:%s ip port\n",argv[0]);
        return -1;
    }

    // 给定默认ip

    char ip_str[128];

    if ( 3 != argc )
    {
        
        strcpy( ip_str , "192.168.91.182");//127.0.0.1也可以
    }
    else{
        
        strcpy( ip_str , argv[2]);
    }
    // 1、创建用户数据报 套接字
    int Udp_Sock_fd = socket(AF_INET,SOCK_DGRAM,0);

    // 2、填充服务器网络信息结构体
    struct sockaddr_in Udp_Sock_addr;
    Udp_Sock_addr.sin_family = AF_INET;
    Udp_Sock_addr.sin_port = htons(atoi(argv[1]));
    Udp_Sock_addr.sin_addr.s_addr = inet_addr(ip_str);

    socklen_t Udp_Sock_size = sizeof(Udp_Sock_addr);
    // 3、将套接字与服务器的网络信息结构体绑定
    bind(Udp_Sock_fd,(struct sockaddr *)&Udp_Sock_addr,Udp_Sock_size);
    // 4、收发数据
    //数据接收
    //用户网络信息结构体
    struct sockaddr_in Udp_Sock_client;
    socklen_t Udp_Sock_client_size = sizeof(Udp_Sock_client);
    char buf[1024] = " ";
    while (1)
    {
        memset(buf,0,sizeof(buf));
        //接收
        recvfrom(Udp_Sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&Udp_Sock_client,&Udp_Sock_client_size);
        printf("接收到的信息:%s\n",buf);
        //发送
        sendto(Udp_Sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&Udp_Sock_client,Udp_Sock_client_size);
    }
    
    // 5、关闭套接字
    close(Udp_Sock_fd);
    return 0;
}
